/**
 * NodeType类型列表
 */
const Node = {
  ELEMENT_NODE: 1, // 一个 元素 节点，例如 <p> 和 <div>
  ATTRIBUTE_NODE: 2, // 元素 的耦合 属性
  TEXT_NODE: 3, // Element 或者 Attr 中实际的 文字
  CDATA_SECTION_NODE: 4, // 一个 CDATASection，例如 <!CDATA[[ … ]]>
  PROCESSING_INSTRUCTION_NODE: 7, // 一个用于 XML 文档的 ProcessingInstruction (en-US) ，例如 <?xml-stylesheet ... ?> 声明
  COMMENT_NODE: 8, // 一个 Comment 节点
  DOCUMENT_NODE: 9, // 一个 Document 节点
  DOCUMENT_TYPE_NODE: 10, // 描述文档类型的 DocumentType 节点。例如 <!DOCTYPE html> 就是用于 HTML5 的
  DOCUMENT_FRAGMENT_NODE: 11 // 一个 DocumentFragment 节点
}

/**
 * 用于node.constructor.name来判别是浏览器默认dom还是自定义VDom
 */
const NodeName = {
  Text: 'Text',
  VNode: 'VNode'
}

/**
 * 常量属性的位掩码。这是筛选特定类型节点的便捷方式
 */
const NodeFilter = {
  SHOW_ALL: 0xFFFFFFFF, // 显示所有节点
  SHOW_ELEMENT: 0x00000001, // 显示元素 Element 节点
  SHOW_ATTRIBUTE: 0x00000002, // 显示属性 Attr 节点。这只在当以一个根 Attr 节点为起点节点的TreeWalker 中才有意义，在这种情况下，这意味着属性节点会出现在迭代或遍历第一次出现的位置。因为属性节点永远不是其他节点的子节点，所以在文档树中的遍历不会出现属性节点
  SHOW_TEXT: 0x00000004, // 显示文字 Text 节点
  SHOW_CDATA_SECTION: 0x00000008, // 显示 CDATA CDATASection 节点
  SHOW_PROCESSING_INSTRUCTION: 0x00000040, // 显示处理指令 ProcessingInstruction (en-US) 节点
  SHOW_COMMENT: 0x00000080, // 显示注释 Comment 节点
  SHOW_DOCUMENT: 0x00000100, // 显示文档 Document 节点
  SHOW_DOCUMENT_TYPE: 0x00000200, // 显示文档类型 DocumentType 节点
  SHOW_DOCUMENT_FRAGMENT: 0x00000400, // 显示文档片段 DocumentFragment 节点
  FILTER_ACCEPT: 1, // Accept the node
  FILTER_REJECT: 2, // Reject the node
  FILTER_SKIP: 3 // Skip this single node
}
// https://developer.mozilla.org/zh-CN/docs/Web/API/TreeWalker

export {
  Node,
  NodeName,
  NodeFilter
}